/*
 * @Author: zhaohui yuan
 * @Date: 2023-06-14 18:11:52
 * @Purpose: http请求拦截器
 */

import globalData from "@/globalData";

let needLoginCodes = [401]; // 需要重新登录的状态码

module.exports = (vm) => {
    // 初始化请求配置
    uni.$u.http.setConfig((config) => {
        config.originalData = true, // 是否在拦截器中返回服务端的原始数据
        config.loadingText = "请稍后...", // 请求loading中的文字提示
        config.loadingMask = true, // 展示loading的时候，是否给一个透明的蒙层，防止触摸穿透
        config.loadingTime = 0 // 在此时间内，请求还没回来的话，就显示加载中动画，单位ms
        return config
    });
	
	// 请求拦截
	uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
	    console.log("请求拦截器：", config)
		let contentType = "application/json"
		//是否需要设置自定义请求头
		if(config.method == "POST" && !uni.$u.test.isEmpty(config.data.contentType)){
			contentType = config.data.contentType
		}
		let remote_config = globalData.Remote_Config
		let access_url = globalData.default_remote
		for(let i in remote_config){
			if(config.method == "POST"){
				if(config.data.systemid == remote_config[i].system){//拦截请求，访问配置系统的地址
					access_url = remote_config[i].remote
				}
			}else if(config.method == "GET"){
				if(config.params.systemid == remote_config[i].system){//拦截请求，访问配置系统的地址
					access_url = remote_config[i].remote
				}
			}
		}
		config.baseURL = access_url
		
		// let { loading = true } = config.data
		
		const userInfo = uni.getStorageSync('userInfo')
		// config.showLoading = loading
		config.header = {
			"Content-Type": contentType,
			accessToken: uni.getStorageSync("access_token") || "",
			"sysid": "SysAdmin",
			"syspwd": "pass",
			"userId": userInfo.userId
		}
		
		//重新封装请求数据,去除不需要的参数
		if(config.method == "POST" && config.data.systemid != undefined){
			delete config.data.systemid
			if(config.data.url != undefined){
				delete config.data.url
			}
			if(config.data.contentType != undefined){
				delete config.data.contentType
			}
		}
	
		// delete config.data.loading;
	
		// #ifdef MP-WEIXIN
		console.log("请求信息：", config);
		// #endif
	
		return config;
	}, config => { // 可使用async await 做异步操作
	    return Promise.reject(config)
	})
	
	// 响应拦截
	uni.$u.http.interceptors.response.use((response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/
		
		  // #ifdef MP-WEIXIN
		  console.log("响应信息：", response);
		  // #endif
		
		  let { code, message } = response.data;
		
		  if (needLoginCodes.includes(code)) {
		    //vm.$u.toast(message || "验证失败，请重新登录");
		  } else if (code != 200) {
		    //vm.$u.toast(message || "请求失败，请重试");
		  }
		
		  return response.data;
		
	}, (response) => { 
		// 对响应错误做点什么 （statusCode !== 200）
		return Promise.reject(response)
	})
}
